#pragma once
template<class iterator, class Ref, class Ptr>
struct Reverse_iterator
{
	typedef Reverse_iterator<iterator, Ref, Ptr> Self;
	Reverse_iterator(iterator it)
		:_cur(it)
	{

	}
	Self& operator++()
	{
		--_cur;
		return *this;
	}
	Self operator++(int)
	{
		iterator tmp(_cur);
		--_cur;
		return tmp;
	}
	Self& operator--()
	{
		++_cur;
		return *this;

	}
	Self operator--(int)
	{
		iterator tmp(_cur);
		++_cur;
		return tmp;
	}
	Ref operator*()
	{
		iterator tmp(_cur);
		--tmp;
		return *tmp;
	}
	bool operator!=(const Self& s)
	{
		return _cur != s._cur;
	}
	Ptr operator->()
	{
		return &(operator*());
	}
	iterator _cur;
};
